package com.yuncheng.spcyApi.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuncheng.spcyApi.entity.SpcySqsxXpjl;
import com.yuncheng.common.base.service.BaseService;
import com.yuncheng.spcyApi.vo.common.OrderItemVo;
import com.yuncheng.spcyApi.vo.common.PageVo;
import com.yuncheng.spcyApi.vo.spcy.SpcyXpryUserVo;
import com.yuncheng.spcyApi.vo.sqsx.SqsxZzZyYbNumVo;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @Description: 审评查验-选派记录
 * @Author: csx
 * @Date: 2023-03-03
 * @Version: V1.0
 */
public interface ISpcySqsxXpjlService extends BaseService<SpcySqsxXpjl> {

    /**
     * 获取申请事项-选派记录
     * @param sqsxid 申请事项id
     * @param flowType 流程类型（查验、审评）
     */
    List<SpcySqsxXpjl> getXpjlBySqsxId(String sqsxid,String flowType);

    /**
     * 查询所有检查员选派记录分页列表
     * @param sqsxid 申请事项id
     * @return
     */
    Page<SpcySqsxXpjl> getXpjlPageListBySqsxId(String sqsxid, String key, Integer pageNo, Integer pageSize);

    /**
     * 获取同意-申请事项选派记录
     * @param sqsxid 申请事项id
     * @param flowType 流程类型（查验、审评）
     */
    List<SpcySqsxXpjl> getTyXpXpjlList(String sqsxid,String flowType);

    /** 查询同意选派人员姓名列表 */
    List<SpcyXpryUserVo> getTyxpUserBeanListByFsqsxId(String sqsxid);

    /** 查询选派人员姓名列表 */
    List<SpcyXpryUserVo> getXpUserBeanListByFsqsxId(String sqsxid, String fsftyxp);

    /**
     * 获取同意-申请事项选派记录(不排序)
     * @param sqsxid 申请事项id
     */
    List<SpcySqsxXpjl> getTyXpXpjlListNotOrder(String sqsxid);

    /**
     * 获取同意并未发送检查通知短信-申请事项选派记录(是否存在同意选派人员变动)
     * @param sqsxid 申请事项id
     * @return 不为空：存在同意选派人员变动
     */
    List<String> getTyXpXpjlListNotSendJctzSms(String sqsxid);

    /** 获取选派未确认人员且没有没有发送确认短信的人员列表 */
    List<SpcySqsxXpjl> getDqrXpjlNotSendSmsztList(String sqsxid);

    /**
     * 将所有不同意的人员并已经发送过检查短信的时间置空
     */
    void updateXpjlInJctzSmsEmpty(String sqsxid);

    /** 将选派记录为待确认的全部置为未处理(清空记录) */
    void updateDqrXpjlToWcl(String sqsxid, String bz);

    /** 更新选派记录-发送检查通知短信 */
    void updateJctzSms(String id, String fjctzdxnr);

    /**
     * 获取不同意-申请事项选派记录
     * @param sqsxid 申请事项id
     * @param flowType 流程类型（查验、审评）
     */
    List<SpcySqsxXpjl> getDqrXpXpjlList(String sqsxid,String flowType,boolean isOrder);

    /**
     * 查询正式检查员-同意-的选派记录
     * @param sqsxid 申请事项id
     */
    List<SpcySqsxXpjl> getTyXpXpjlZsjcyList(String sqsxid);

    /**
     * 年度选派及检查情况
     * @param userid 用户id
     * @param year 年份
     * @return
     */
    Map getJcyYearJcqk(String userid, String year);

    /**
     * 计算出勤率
     * @param zxxpcs 选派次数
     * @param sjjccs 实际检查次数
     * @return
     */
    String jsNdkpCql(int zxxpcs, int sjjccs);

    /**
     * 更新预备检查员-考评结果
     * @param sqsxid 申请事项id
     * @param jcyid 检查员id
     * @param kpjg 考评结果
     */
    void updateYbKpjgByJcy(String jcyid, String sqsxid, String kpjg);

    /**
     * 个人选派记录
     */
    Page<SpcySqsxXpjl> selectPageList(SpcySqsxXpjl query, PageVo pageVo, OrderItemVo orderItemVo, boolean onlyCurrentUser);

    /**
     * 获取申请事项-选派组长列表
     */
    List<SpcySqsxXpjl> getSqsxXpZzList(String sqsxid);

    /**
     * 获取未确认-申请事项选派记录
     * @param sqsxid 申请事项id
     */
    List<SpcySqsxXpjl> getWqrXpXpjlList(String sqsxid);

    /**
     * 同步更新选派记录-工作时间
     */
    void syncUpdateXpjlGzsjBySqsx(String sqsxid, Date gzkssj, Date gzjssj);

    /** 获取年度选派情况 */
    List<SpcySqsxXpjl> getYearJcyXpjlqkList(@Param("userid")String userid, @Param("year")String year);

    /** 根据选派记录id查询对应的申请事项id */
    String getXpjlSqsxidById(String id);

    /**
     * 批量插入被合并申请事项的选派记录
     */
    void batchInsertXpjlList(List<SpcySqsxXpjl> batchList);

    /**
     * 批量插入选派记录
     */
    void batchAddXpjlList(List<SpcySqsxXpjl> batchList);

    /** 获取定时选派的相关未确认人员 */
    List<SpcySqsxXpjl> getDsxpIndexWqrList(String fdsxpywid);

    /**
     * 查询选派记录列表-根据申请id and ( 同意条件 or（未确认 and 没有发送确认短信）
     * @param sqsxid 申请事项id
     * */
    List<SpcySqsxXpjl> getTyWqrFsdqrSmsList(String sqsxid);

    /**
     * 查询选派记录列表-根据申请id和是否同意选派状态
     * @param sqsxid 申请事项id
     * @param fsftyxp 是否同意选派状态
     * */
    List<SpcySqsxXpjl> getXpListSizeByFsftyxp(String sqsxid, String fsftyxp);

    /**
     * 查询同意选派记录列表-根据申请id
     * @param sqsxid 申请事项id
     * @param fsftyxp 同意选派状态
     * @param fsmszt 确认选派短信状态
     * */
    List<String> getXpjlListSize(String sqsxid, String fsftyxp, String fsmszt);

    /**
     *  查询选派组长/组员/预备人数
     *  根据申请id and ( 同意条件 or（未确认 and 没有发送确认短信）
     * */
    SqsxZzZyYbNumVo getXpWqrFsdqrSmsZzZyYbNumBean(String sqsxid);

    /**
     *  查询同意选派组长/组员/预备人数
     *  根据申请id
     * */
    SqsxZzZyYbNumVo getTyXpZzZyYbNumBean(String sqsxid);

    /**
     * 验证当前申请事项-是否已选派该人员
     */
    List<String> selectIdByFsqsxidAndFuserid(String sqsxid, String userid);

    /**
     * 验证当前申请事项-是否已选派该人员
     */
    List<String> selectFsftyxpIdByFsqsxidAndFuserid(String sqsxid, String userid, String fsftyxp);

    /** 查询选派人员身份数量 */
    Integer selectTySskSize(String sqsxid, String fsftyxp, String fssk);

}
